package main.beans;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import main.exceptions.GravidadeInvalidaException;
import main.exceptions.NomeVazioException;
import main.interfaces.Cadastravel;

public class Doenca implements Cadastravel, Serializable {

    private String numeroCadastro;
    private Date dataCadastro;
    private String nome;
    private String descricao;
    private int gravidade;

    public Doenca(String nome, int gravidade) throws Exception {
        if (nome.isEmpty())
            throw new NomeVazioException();
        if (gravidade < 1 || gravidade > 3)
            throw new GravidadeInvalidaException();

        this.nome = nome;
        this.gravidade = gravidade;
        
        dataCadastro = Calendar.getInstance().getTime();
        this.numeroCadastro = Math.abs(hashCode()) + "";
    }

    @Override
    public String getNumeroCadastro() {
        return numeroCadastro;
    }

    @Override
    public void setNumeroCadastro(String cadastro) {
        numeroCadastro = cadastro;
    }

    @Override
    public Date getDataCadastro() {
        return dataCadastro;
    }

    @Override
    public String getNome() {
        return nome;
    }

    @Override
    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public int getGravidade() {
        return gravidade;
    }

    public void setGravidade(int gravidade) {
        this.gravidade = gravidade;
    }

    @Override
    public String toString() {
        return "nome: " + getNome() + "\ndescricao: " + descricao;
    }

    @Override
    public boolean equals(Object objeto) {
        if (!(objeto instanceof Doenca))
            return false;
        Doenca outra = (Doenca) objeto;
        return outra.getNome().equals(getNome()) && outra.getGravidade() == getGravidade();
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 73 * hash + Objects.hashCode(this.nome);
        hash = 73 * hash + Objects.hashCode(this.descricao);
        hash = 73 * hash + this.gravidade;
        return hash;
    }

}
